package h_eekwan.basic;

public class J12_SungJuk_v4b {

	public static void main(String[] args) {
		// 접근 지정자를 이용해서 SungJuk 클래스 정의
		J12SungJuk sj = new J12SungJuk();
		// sj.name = "희";
		// name 멤버변수는 접근지정자가 private이므로
		// 위 코드처럼 작성하면 오류 발생!
		sj = new J12SungJuk("희관",100,77,54);
		// 어쩔수 없이 생성자를 이용해서
		// nam, kor, eng, mat 멤버변수를 초기화 함
		
		//ystem.out.println(sj.name);
		// 하지만, 기존 방식으로 name 변수를 출력하려해도
		// private 접근 지정자 때문에 오류 발생!	
		
		// 따라서, private으로 선언된 멤버변수를
		// 조작하거나 값을 읽어올려면
		// 그것을 위한 특별한 메서드를 작성하는것이 좋음
		// 실무에서는 setter/getter 메서도를 작성함
		sj.setName("희관");
		System.out.println(sj.getName());
		sj.setKor(77);
		System.out.println(sj.getKor());
		sj.setEng(100);
		System.out.println(sj.getEng());
		sj.setMat(54);
		System.out.println(sj.getMat());
		
		System.out.println(sj.toString());
		
		// toString() 메서드를 이용해서
		// 객체의 모든 멤버변수 출력하기
		
	}	// main

}	// class

class J12SungJuk {
	private String name;
	private int kor;
	private int eng;
	private int mat;
	
	private int tot;
	private double avg;
	private char grd;
		
	
	
	public J12SungJuk(){}
	public J12SungJuk(String name, int kor, int eng, int mat){
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;

	}
	

// setter 메서드 : 멤버변수에 값을 set하기 위한 메서드 (셋팅)
// public void set멤버변수명 (자료형 멤버변수명){
//		this.멤버변수명 = 멤버변수명;
// }
public void setName( String name ){
	this.name = name;
}
public void setKor( int kor ){
	this.kor = kor;
}
public void setEng(int eng){
	this.eng = eng;
}
public void setMat( int mat ){
	this.mat = mat;
}public void setTot( int tot ){	
	this.tot = tot;
}
// getter 메서드 : 멤버변수의 값을 get하기 위한 메서드 (get 받아온다 얻어오다)
//public 멤버변수의 자료형 get멤버변수명{
//		return 멤버변수명;
//}
public String getName() {
	return name; 
}
public int getKor(){
	return kor;
}
public int getEng(){
	return eng;
}
public int getMat(){
	tot = kor + eng + mat;
	return mat;
	
	}

// 객체지향 프로그래밍에서는
// 메서드에 너무 많은 책임을 부여하는 것을 금지하고 있음
// 예를 들어, getTot 메서드를 살펴보면
// 단순히 tot 변수의 값을 읽어오는 기능외에
// 입력한 성적데이터에 대한 총점을 구하는 기능도 포함

public int getTot(){
	tot = kor + eng + mat;
	return tot;
}
public double getAverage(){
	avg = tot/3;
			return avg;
}
public char getGrade(){
	switch( (int)getAverage()/10
			
			){
	case 10: 
	case 9 : grd = '수';
		break;
	case 8 : grd = '우';
		break;
	case 7 : grd = '미';
		break;
	case 6 : grd = '양';
		break;
	default : grd = '가';
	
	}
	return grd;
}
	// 멤버변수의 모든 값을 출력하기 위해
	// Object 클래스가 기본적으로 제공하는
	// 메서드인 toString()을 재정의override
	@Override	// 어노테이션 : 컴파일러를 위한 주석
	public String toString() {
		String result = "";
		result = result + "이름 : " + name+ " / ";
		result +=  "국어점수 : " + kor + " / ";
		result = result + "영어점수 : " + eng+ " / ";
		result = result + "수학점수 : " + eng+ " / ";
		
		result = result + " 총점 : " + getTot();
		result = result + " 평균 : " + getAverage();
		
		result = result + " 학점 : " + getGrade();
		
		return result.toString();
	}
	





		
	}
